<!DOCTYPE html>
<html lang="en-us">
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    
<meta charset="UTF-8">
<title>Thread pools | Elasticsearch Guide [7.7] | Elastic</title>
<link rel="home" href="index.html" title="Elasticsearch Guide [7.7]">
<link rel="up" href="settings.html" title="Configuring Elasticsearch">
<link rel="prev" href="modules-transport.html" title="Transport">
<link rel="next" href="notification-settings.html" title="Watcher settings in Elasticsearch">
<meta name="DC.type" content="Learn/Docs/Elasticsearch/Reference/7.7">
<meta name="DC.subject" content="Elasticsearch">
<meta name="DC.identifier" content="7.7">
<meta name="robots" content="noindex,nofollow">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://cdn.optimizely.com/js/18132920325.js"></script>
    <link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
    <link rel="icon" type="image/png" href="/favicon-32x32.png" sizes="32x32">
    <link rel="icon" type="image/png" href="/android-chrome-192x192.png" sizes="192x192">
    <link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96">
    <link rel="icon" type="image/png" href="/favicon-16x16.png" sizes="16x16">
    <link rel="manifest" href="/manifest.json">
    <meta name="apple-mobile-web-app-title" content="Elastic">
    <meta name="application-name" content="Elastic">
    <meta name="msapplication-TileColor" content="#ffffff">
    <meta name="msapplication-TileImage" content="/mstile-144x144.png">
    <meta name="theme-color" content="#ffffff">
    <meta name="naver-site-verification" content="936882c1853b701b3cef3721758d80535413dbfd">
    <meta name="yandex-verification" content="d8a47e95d0972434">
    <meta name="localized" content="true">
    <meta name="st:robots" content="follow,index">
    <meta property="og:image" content="https://www.elastic.co/static/images/elastic-logo-200.png">
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <link rel="icon" href="/favicon.ico" type="image/x-icon">
    <link rel="apple-touch-icon-precomposed" sizes="64x64" href="/favicon_64x64_16bit.png">
    <link rel="apple-touch-icon-precomposed" sizes="32x32" href="/favicon_32x32.png">
    <link rel="apple-touch-icon-precomposed" sizes="16x16" href="/favicon_16x16.png">
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <link rel="stylesheet" type="text/css" href="/guide/static/styles.css">
  </head>

  <!--© 2015-2021 Elasticsearch B.V. Copying, publishing and/or distributing without written permission is strictly prohibited.-->

  <body>
    <!-- Google Tag Manager -->
    <script>dataLayer = [];</script><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-58RLH5" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-58RLH5');</script>
    <!-- End Google Tag Manager -->

    <!-- Global site tag (gtag.js) - Google Analytics -->
    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-12395217-16"></script>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag('js', new Date());
      gtag('config', 'UA-12395217-16');
    </script>

    <!--BEGIN QUALTRICS WEBSITE FEEDBACK SNIPPET-->
    <script type="text/javascript">
      (function(){var g=function(e,h,f,g){
      this.get=function(a){for(var a=a+"=",c=document.cookie.split(";"),b=0,e=c.length;b<e;b++){for(var d=c[b];" "==d.charAt(0);)d=d.substring(1,d.length);if(0==d.indexOf(a))return d.substring(a.length,d.length)}return null};
      this.set=function(a,c){var b="",b=new Date;b.setTime(b.getTime()+6048E5);b="; expires="+b.toGMTString();document.cookie=a+"="+c+b+"; path=/; "};
      this.check=function(){var a=this.get(f);if(a)a=a.split(":");else if(100!=e)"v"==h&&(e=Math.random()>=e/100?0:100),a=[h,e,0],this.set(f,a.join(":"));else return!0;var c=a[1];if(100==c)return!0;switch(a[0]){case "v":return!1;case "r":return c=a[2]%Math.floor(100/c),a[2]++,this.set(f,a.join(":")),!c}return!0};
      this.go=function(){if(this.check()){var a=document.createElement("script");a.type="text/javascript";a.src=g;document.body&&document.body.appendChild(a)}};
      this.start=function(){var a=this;window.addEventListener?window.addEventListener("load",function(){a.go()},!1):window.attachEvent&&window.attachEvent("onload",function(){a.go()})}};
      try{(new g(100,"r","QSI_S_ZN_emkP0oSe9Qrn7kF","https://znemkp0ose9qrn7kf-elastic.siteintercept.qualtrics.com/WRSiteInterceptEngine/?Q_ZID=ZN_emkP0oSe9Qrn7kF")).start()}catch(i){}})();
    </script><div id="ZN_emkP0oSe9Qrn7kF"><!--DO NOT REMOVE-CONTENTS PLACED HERE--></div>
    <!--END WEBSITE FEEDBACK SNIPPET-->

    <div id="elastic-nav" style="display:none;"></div>
    <script src="https://www.elastic.co/elastic-nav.js"></script>

    <!-- Subnav -->
    <div>
      <div>
        <div class="tertiary-nav d-none d-md-block">
          <div class="container">
            <div class="p-t-b-15 d-flex justify-content-between nav-container">
              <div class="breadcrum-wrapper"><span><a href="/guide/" style="font-size: 14px; font-weight: 600; color: #000;">Docs</a></span></div>
            </div>
          </div>
        </div>
      </div>
    </div>

    <div class="main-container">
      <section id="content">
        <div class="content-wrapper">

          <section id="guide" lang="en">
            <div class="container">
              <div class="row">
                <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                  <!-- start body -->
                  <div class="page_header">
<strong>IMPORTANT</strong>: No additional bug fixes or documentation updates
will be released for this version. For the latest information, see the
<a href="../current/index.html">current release documentation</a>.
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch Guide [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="setup.html">Set up Elasticsearch</a></span>
»
<span class="breadcrumb-link"><a href="settings.html">Configuring Elasticsearch</a></span>
»
<span class="breadcrumb-node">Thread pools</span>
</div>
<div class="navheader">
<span class="prev">
<a href="modules-transport.html">« Transport</a>
</span>
<span class="next">
<a href="notification-settings.html">Watcher settings in Elasticsearch »</a>
</span>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="modules-threadpool"></a>Thread pools<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/modules/threadpool.asciidoc">edit</a>
</h2>
</div></div></div>
<p>A node uses several thread pools to manage memory consumption.
Queues associated with many of the thread pools enable pending requests
to be held instead of discarded.</p>
<p>There are several thread pools, but the important ones include:</p>
<div class="variablelist">
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">generic</code>
</span>
</dt>
<dd>
For generic operations (for example, background node discovery).
Thread pool type is <code class="literal">scaling</code>.
</dd>
</dl>
</div>
<div class="variablelist">
<a id="search-threadpool"></a>
<dl class="variablelist">
<dt>
<span class="term">
<code class="literal">search</code>
</span>
</dt>
<dd>
For count/search/suggest operations. Thread pool type is
<code class="literal">fixed_auto_queue_size</code> with a size of
<code class="literal">int((# of available_processors * 3) / 2) + 1</code>, and initial queue_size of
<code class="literal">1000</code>.
</dd>
<dt>
<span class="term">
<a id="search-throttled"></a><code class="literal">search_throttled</code>
</span>
</dt>
<dd>
For count/search/suggest/get operations on <code class="literal">search_throttled indices</code>.
Thread pool type is <code class="literal">fixed_auto_queue_size</code> with a size of <code class="literal">1</code>, and initial
queue_size of <code class="literal">100</code>.
</dd>
<dt>
<span class="term">
<code class="literal">get</code>
</span>
</dt>
<dd>
For get operations. Thread pool type is <code class="literal">fixed</code>
with a size of <code class="literal"># of available processors</code>,
queue_size of <code class="literal">1000</code>.
</dd>
<dt>
<span class="term">
<code class="literal">analyze</code>
</span>
</dt>
<dd>
For analyze requests. Thread pool type is <code class="literal">fixed</code> with a size of <code class="literal">1</code>, queue
size of <code class="literal">16</code>.
</dd>
<dt>
<span class="term">
<code class="literal">write</code>
</span>
</dt>
<dd>
For single-document index/delete/update and bulk requests. Thread pool type
is <code class="literal">fixed</code> with a size of <code class="literal"># of available processors</code>, queue_size of <code class="literal">200</code>.
The maximum size for this pool is <code class="literal">1 + # of available processors</code>.
</dd>
<dt>
<span class="term">
<code class="literal">snapshot</code>
</span>
</dt>
<dd>
For snapshot/restore operations. Thread pool type is <code class="literal">scaling</code> with a
keep-alive of <code class="literal">5m</code> and a max of <code class="literal">min(5, (# of available processors)/2)</code>.
</dd>
<dt>
<span class="term">
<code class="literal">warmer</code>
</span>
</dt>
<dd>
For segment warm-up operations. Thread pool type is <code class="literal">scaling</code> with a
keep-alive of <code class="literal">5m</code> and a max of <code class="literal">min(5, (# of available processors)/2)</code>.
</dd>
<dt>
<span class="term">
<code class="literal">refresh</code>
</span>
</dt>
<dd>
For refresh operations. Thread pool type is <code class="literal">scaling</code> with a
keep-alive of <code class="literal">5m</code> and a max of <code class="literal">min(10, (# of available processors)/2)</code>.
</dd>
<dt>
<span class="term">
<code class="literal">listener</code>
</span>
</dt>
<dd>
Mainly for java client executing of action when listener threaded is set to
<code class="literal">true</code>. Thread pool type is <code class="literal">scaling</code> with a default max of
<code class="literal">min(10, (# of available processors)/2)</code>.
</dd>
<dt>
<span class="term">
<code class="literal">fetch_shard_started</code>
</span>
</dt>
<dd>
For listing shard states.
Thread pool type is <code class="literal">scaling</code> with keep-alive of <code class="literal">5m</code> and a default maximum
size of <code class="literal">2 * # of available processors</code>.
</dd>
<dt>
<span class="term">
<code class="literal">fetch_shard_store</code>
</span>
</dt>
<dd>
For listing shard stores.
Thread pool type is <code class="literal">scaling</code> with keep-alive of <code class="literal">5m</code> and a default maximum
size of <code class="literal">2 * # of available processors</code>.
</dd>
<dt>
<span class="term">
<code class="literal">flush</code>
</span>
</dt>
<dd>
For <a class="xref" href="indices-flush.html" title="Flush API">flush</a>, <a class="xref" href="indices-synced-flush-api.html" title="Synced flush API">synced flush</a>, and <a class="xref" href="index-modules-translog.html" title="Translog">translog</a> <code class="literal">fsync</code> operations.
Thread pool type is <code class="literal">scaling</code> with a keep-alive of <code class="literal">5m</code> and a default
maximum size of <code class="literal">min(5, (# of available processors)/2)</code>.
</dd>
<dt>
<span class="term">
<code class="literal">force_merge</code>
</span>
</dt>
<dd>
For <a class="xref" href="indices-forcemerge.html" title="Force merge API">force merge</a> operations.
Thread pool type is <code class="literal">fixed</code> with a size of 1 and an unbounded queue size.
</dd>
<dt>
<span class="term">
<code class="literal">management</code>
</span>
</dt>
<dd>
For cluster management.
Thread pool type is <code class="literal">scaling</code> with a keep-alive of <code class="literal">5m</code> and a default
maximum size of <code class="literal">5</code>.
</dd>
</dl>
</div>
<p>Changing a specific thread pool can be done by setting its type-specific
parameters; for example, changing the number of threads in the <code class="literal">write</code> thread
pool:</p>
<div class="pre_wrapper lang-yaml">
<pre class="programlisting prettyprint lang-yaml">thread_pool:
    write:
        size: 30</pre>
</div>
<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="thread-pool-types"></a>Thread pool types<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/modules/threadpool.asciidoc">edit</a>
</h3>
</div></div></div>
<p>The following are the types of thread pools and their respective parameters:</p>
<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="fixed-thread-pool"></a><code class="literal">fixed</code><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/modules/threadpool.asciidoc">edit</a>
</h4>
</div></div></div>
<p>The <code class="literal">fixed</code> thread pool holds a fixed size of threads to handle the
requests with a queue (optionally bounded) for pending requests that
have no threads to service them.</p>
<p>The <code class="literal">size</code> parameter controls the number of threads.</p>
<p>The <code class="literal">queue_size</code> allows to control the size of the queue of pending
requests that have no threads to execute them. By default, it is set to
<code class="literal">-1</code> which means its unbounded. When a request comes in and the queue is
full, it will abort the request.</p>
<div class="pre_wrapper lang-yaml">
<pre class="programlisting prettyprint lang-yaml">thread_pool:
    write:
        size: 30
        queue_size: 1000</pre>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="fixed-auto-queue-size"></a><code class="literal">fixed_auto_queue_size</code><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/modules/threadpool.asciidoc">edit</a>
</h4>
</div></div></div>
<div class="warning admon">
<div class="icon"></div>
<div class="admon_content">
<p>This functionality is experimental and may be changed or removed completely in a future release. Elastic will take a best effort approach to fix any issues, but experimental features are not subject to the support SLA of official GA features.</p>
</div>
</div>
<p>deprecated[7.7.0,The experimental <code class="literal">fixed_auto_queue_size</code> thread pool type is
deprecated and will be removed in 8.0.]</p>
<p>The <code class="literal">fixed_auto_queue_size</code> thread pool holds a fixed size of threads to handle
the requests with a bounded queue for pending requests that have no threads to
service them. It’s similar to the <code class="literal">fixed</code> threadpool, however, the <code class="literal">queue_size</code>
automatically adjusts according to calculations based on
<a href="https://en.wikipedia.org/wiki/Little%27s_law" class="ulink" target="_top">Little’s Law</a>. These calculations
will potentially adjust the <code class="literal">queue_size</code> up or down by 50 every time
<code class="literal">auto_queue_frame_size</code> operations have been completed.</p>
<p>The <code class="literal">size</code> parameter controls the number of threads.</p>
<p>The <code class="literal">queue_size</code> allows to control the initial size of the queue of pending
requests that have no threads to execute them.</p>
<p>The <code class="literal">min_queue_size</code> setting controls the minimum amount the <code class="literal">queue_size</code> can be
adjusted to.</p>
<p>The <code class="literal">max_queue_size</code> setting controls the maximum amount the <code class="literal">queue_size</code> can be
adjusted to.</p>
<p>The <code class="literal">auto_queue_frame_size</code> setting controls the number of operations during
which measurement is taken before the queue is adjusted. It should be large
enough that a single operation cannot unduly bias the calculation.</p>
<p>The <code class="literal">target_response_time</code> is a time value setting that indicates the targeted
average response time for tasks in the thread pool queue. If tasks are routinely
above this time, the thread pool queue will be adjusted down so that tasks are
rejected.</p>
<div class="pre_wrapper lang-yaml">
<pre class="programlisting prettyprint lang-yaml">thread_pool:
    search:
        size: 30
        queue_size: 500
        min_queue_size: 10
        max_queue_size: 1000
        auto_queue_frame_size: 2000
        target_response_time: 1s</pre>
</div>
</div>

<div class="section">
<div class="titlepage"><div><div>
<h4 class="title">
<a id="scaling-thread-pool"></a><code class="literal">scaling</code><a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/modules/threadpool.asciidoc">edit</a>
</h4>
</div></div></div>
<p>The <code class="literal">scaling</code> thread pool holds a dynamic number of threads. This
number is proportional to the workload and varies between the value of
the <code class="literal">core</code> and <code class="literal">max</code> parameters.</p>
<p>The <code class="literal">keep_alive</code> parameter determines how long a thread should be kept
around in the thread pool without it doing any work.</p>
<div class="pre_wrapper lang-yaml">
<pre class="programlisting prettyprint lang-yaml">thread_pool:
    warmer:
        core: 1
        max: 8
        keep_alive: 2m</pre>
</div>
</div>

</div>

<div class="section">
<div class="titlepage"><div><div>
<h3 class="title">
<a id="node.processors"></a>Allocated processors setting<a class="edit_me edit_me_private" rel="nofollow" title="Editing on GitHub is available to Elastic" href="https://github.com/elastic/elasticsearch/edit/7.7/docs/reference/modules/threadpool.asciidoc">edit</a>
</h3>
</div></div></div>
<p>The number of processors is automatically detected, and the thread pool settings
are automatically set based on it. In some cases it can be useful to override
the number of detected processors. This can be done by explicitly setting the
<code class="literal">node.processors</code> setting.</p>
<div class="pre_wrapper lang-yaml">
<pre class="programlisting prettyprint lang-yaml">node.processors: 2</pre>
</div>
<p>There are a few use-cases for explicitly overriding the <code class="literal">node.processors</code>
setting:</p>
<div class="olist orderedlist">
<ol class="orderedlist">
<li class="listitem">
If you are running multiple instances of Elasticsearch on the same host but want want
Elasticsearch to size its thread pools as if it only has a fraction of the CPU, you
should override the <code class="literal">node.processors</code> setting to the desired fraction, for
example, if you’re running two instances of Elasticsearch on a 16-core machine, set
<code class="literal">node.processors</code> to 8.  Note that this is an expert-level use case and there’s
a lot more involved than just setting the <code class="literal">node.processors</code> setting as there are
other considerations like changing the number of garbage collector threads,
pinning processes to cores, and so on.
</li>
<li class="listitem">
Sometimes the number of processors is wrongly detected and in such cases
explicitly setting the <code class="literal">node.processors</code> setting will workaround such issues.
</li>
</ol>
</div>
<p>In order to check the number of processors detected, use the nodes info
API with the <code class="literal">os</code> flag.</p>
</div>

</div>
<div class="navfooter">
<span class="prev">
<a href="modules-transport.html">« Transport</a>
</span>
<span class="next">
<a href="notification-settings.html">Watcher settings in Elasticsearch »</a>
</span>
</div>
</div>

                  <!-- end body -->
                </div>
                <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                  <div id="rtpcontainer" style="display: block;">
                    <div class="mktg-promo">
                      <h3>Most Popular</h3>
                      <ul class="icons">
                        <li class="icon-elasticsearch-white"><a href="https://www.elastic.co/webinars/getting-started-elasticsearch?baymax=default&amp;elektra=docs&amp;storm=top-video">Get Started with Elasticsearch: Video</a></li>
                        <li class="icon-kibana-white"><a href="https://www.elastic.co/webinars/getting-started-kibana?baymax=default&amp;elektra=docs&amp;storm=top-video">Intro to Kibana: Video</a></li>
                        <li class="icon-logstash-white"><a href="https://www.elastic.co/webinars/introduction-elk-stack?baymax=default&amp;elektra=docs&amp;storm=top-video">ELK for Logs &amp; Metrics: Video</a></li>
                      </ul>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </section>

        </div>


<div id="elastic-footer"></div>
<script src="https://www.elastic.co/elastic-footer.js"></script>
<!-- Footer Section end-->

      </section>
    </div>

<script src="/guide/static/jquery.js"></script>
<script type="text/javascript" src="/guide/static/docs.js"></script>
<script type="text/javascript">
  window.initial_state = {}</script>
  </body>
</html>
